package com.itheima.day05.BigDecimal;

import java.math.BigDecimal;
//当存在两个浮点数计算时，使用BigDecimal类！！
public class BigDecimalTest {
    public static void main(String[] args) {
        //现象：浮点型数据运算，可能结果失真、丢失精度
        System.out.println(0.1+0.2);
        //上面运行结果为0.30000000000000004
        // 解决方法：使用BigDecimal类（非工具类，创建对象后使用）
        //创建构造方法，传入字符串参数，浮点型参数不推荐使用，会丢失精度
        BigDecimal b1 = new BigDecimal("0.1");
        BigDecimal b2 = new BigDecimal("0.2");
        BigDecimal b3 = b1.add(b2);
        //如果想要获取double类型的结果值，调用doubleValue()方法
        double b4 = b3.doubleValue();
        System.out.println(b4);
        //（推荐使用）也可以直接BigDecimal.valueOf(0.1)，结果通样不失真
        BigDecimal b5 = BigDecimal.valueOf(0.1);
        BigDecimal b6 = BigDecimal.valueOf(0.2);
        BigDecimal b7 = b5.add(b6);
        System.out.println(b7);
        //.add()为加法，.subtract()为减法，.multiply()为乘法，.divide()为除法
        System.out.println(b1.subtract(b2));
        System.out.println(b1.multiply(b2));
        System.out.println(b1.divide(b2));
        //注意事项：除法存在除不尽的情况，会丢失精度
        // 解决方法：使用BigDecimal.ROUND_HALF_UP，表示四舍五入
        BigDecimal b8 = BigDecimal.valueOf(0.3);
        // b1.divide(b8（参数1),2（参数2）,BigDecimal.ROUND_HALF_UP（参数3）)
        // 参数1：除数，参数2：精度，保留几位小数 ，参数3：取舍规则
        BigDecimal b9 = b1.divide(b8, 2, BigDecimal.ROUND_HALF_UP);
        System.out.println(b9);

    }
}
